package cn.miaopasi.learn.websocket.base;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;

/**
 * 聊天Socket.
 *
 * @author Administrator
 */
@ServerEndpoint("/ws/chat/{userId}")
@Component
@Slf4j
public class ChatWebSocketEndpoint {

    /**
     * 当前操作的会话
     */
    private Session session;

    /**
     * 建立会话完成
     *
     * @param session 会话
     * @param userId  用户ID
     * @author lixingwu
     */
    @OnOpen
    public void onOpen(Session session, @PathParam("userId") String userId) {
        log.debug("用户[{}]已连接，会话标识[{}]", userId, session.getId());
        // 存储会话
        SessionPool.sessions.put(userId, session);
        // 发送欢迎消息
        SessionPool.sendMessage(session.getId(), "系统：欢迎欢迎 " + userId);
    }

    /**
     * 关闭会话
     *
     * @param session 会话
     * @author lixingwu
     */
    @OnClose
    public void onClose(Session session) throws IOException {
        log.debug("会话[{}]已断开连接", session.getId());
        SessionPool.close(session.getId());
        session.close();
    }

    /**
     * <p>方法名称：会话消息传递.</p>
     * <p>详细描述：.</p>
     * <p>创建时间：2022-01-18 17:33:31</p>
     * <p>创建作者：李兴武</p>
     * <p>修改记录：</p>
     *
     * @param message 消息
     * @param session 会话
     * @author 李兴武
     */
    @OnMessage
    public void onMessage(String message, Session session) {
        log.debug("会话[{}]发送消息", session.getId());
        SessionPool.sendMessage("系统：我是复读机 " + message);
    }
}
